package br.univap.aed.utils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Vector;

import org.apache.commons.io.FileUtils;

import br.univap.aed.cenario1.utils.ListaEncadeada;
import br.univap.aed.cenario1.utils.Nodo;
import br.univap.aed.cenario1.utils.Registro;

public class QuickSortUtils {
	private static Random random = new Random();

	/**
	 * Retorna um vetor de inteiros preenchido de acordo com os parametros
	 * passados para size
	 * 
	 * @param seed
	 *            inteiro utilizado para gerar n�meros aleat�rios
	 * @param size
	 *            o tamanho que dever� conter a lista encadeada
	 * @return
	 */
	public static ArrayList<Integer> geraInteiros(int semente, int size) {
		random.setSeed(semente);

		ArrayList<Integer> inteiros = new ArrayList<Integer>();

		for (int i = 0; i < size - 1; i++) {
			inteiros.add(random.nextInt(500000));
		}

		return inteiros;
	}

	/**
	 * Retorna uma vetor de objetos preenchido de acordo com os parametros
	 * passados para size
	 * 
	 * @param seed
	 *            inteiro utilizado para gerar n�meros aleat�rios
	 * @param size
	 *            o tamanho que dever� conter a lista encadeada
	 * @return
	 */
	public static Vector<Registro> geraVetorRegistros(int seed, int size) {
		random.setSeed(seed);
		Vector<Registro> vetorRegistros = new Vector<Registro>();

		for (int i = 0; i < size; i++) {
			Registro r = new Registro();
			r.setChave(random.nextInt());
			r.setDescricao("texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto  ");
			r.setTexto("texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto texto  ");
			r.setOk(true);
			r.setValor1(Math.random() * (i + 1));
			r.setValor2(Math.random() * (i + 2));
			r.setValor3(Math.random() * (i + 3));
			r.setValor4(Math.random() * (i + 4));
			vetorRegistros.add(r);
		}

		return vetorRegistros;
	}

	/**
	 * Retorna uma lista encadeada preenchida de acordo com os parametros
	 * passados para size
	 * 
	 * @param seed
	 *            inteiro utilizado para gerar n�meros aleat�rios
	 * @param size
	 *            o tamanho que dever� conter a lista encadeada
	 * @return
	 */
	public static ListaEncadeada geraListaEncadeada(int seed, int size) {
		random.setSeed(seed);
		ListaEncadeada lista = new ListaEncadeada();

		for (int i = 0; i < size; i++) {
			Nodo n = new Nodo();
			n.setKey(random.nextInt());
			lista.adiciona(n);
		}

		return lista;

	}

	/**
	 * Sorteia um n�mero alet�rio entre 0 e o limite estipulado
	 * 
	 * @param limit
	 *            valor maximo do n�mero que poder� ser gerado
	 * @return
	 */
	public static int sortear(int limite) {
		return (int) (Math.random() * limite);
	}

	/**
	 * Salva um arquivo qualquer
	 * 
	 * @param path
	 *            caminho completo onde o arquivo ser� salvo incluindo o nome do
	 *            mesmo
	 * @param content
	 *            conteudo que ser� salvo no arquivo
	 * @throws IOException
	 */
	public static void saveFile(String path, String content) throws IOException {
		FileUtils.writeStringToFile(new File(path), content);
	}
}
